package com.yx.changdao.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yx.changdao.common.data.Result;
import com.yx.changdao.common.entity.SysUser;
import com.yx.changdao.common.exception.AlertException;

/**
 * @Title: SysUserService
 * @Description: 系统用户服务。
 * @Auther: Zhangjiashun
 * @Version: 1.0
 * @create 2019/11/6 11:56
 */
public interface SysUserService extends IService<SysUser> {
    /**
     * 添加用户 传入 SysUser 对象
     * 必填 用户名， 密码， 昵称。
     * 密码传入明文，添加成功后返回的 SysUser 为加密后密码
     *
     * @param user 用户
     * @return 添加后的用户
     * @throws AlertException 异常
     */
    SysUser addUser(SysUser user) throws AlertException;

    /**
     * 通过id获取用户
     *
     * @param userId 用户id
     * @return 用户
     * @throws AlertException 异常
     */
    SysUser getUserById(String userId) throws AlertException;

    /**
     * 更新用户
     *
     * @return 更新后的用户
     */
    Boolean updateUser(SysUser user) throws AlertException;

    /**
     * 通过账号获取用户
     *
     * @param username 用户名
     * @return 用户
     */
    SysUser getUserByUsername(String username);

    /**
     * 锁定用户
     *
     * @param userId 用户id
     * @return 是否成功
     * @throws AlertException 异常
     */
    Boolean lockUser(String userId) throws AlertException;

//    /**
//     * 解锁用户
//     *
//     * @param userId
//     * @return
//     * @throws AlertException
//     */
//    SysUser unLockUser(String userId) throws AlertException;

    /**
     * 修改密码
     *
     * @param userId   用户id
     * @param password 密码
     * @return 修改以后的用户
     * @throws AlertException 异常
     */
    SysUser changePwd(String userId, String password) throws AlertException;

    /**
     * 根据id删除用户
     *
     * @param userId 用户id
     * @return 是否删除成功
     */
    Boolean delUser(String userId);


    /**
     * 获取token
     *
     * @param user 用户
     * @return 用户token
     */
    String generateJwtToken(SysUser user) throws AlertException;

    /**
     * 删除token
     *
     * @param userId 用户id
     */
    void deleteLoginInfo(String userId);


    /**
     * 获取登录用户信息
     *
     * @param userId 用户id
     * @return 用户
     */
    SysUser getJwtTokenInfo(String userId, String token) throws AlertException;

    /**
     * 批量生成用户
     */
    Boolean saveBatchUser(String controlManage,String controlCommon,String performerManage,String performerCommon) throws  AlertException;
}
